package com.ruoyi.project.module.lyx;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.project.domain.YqgBaseinfo;
import com.ruoyi.project.service.IYqgBaseinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 人员基础信息Controller
 * 
 * @author dr
 * @date 2023-04-17
 */
@RestController
@RequestMapping("/lyx/baseinfo")
public class LyxYqgBaseinfoController extends BaseController
{
    @Autowired
    private IYqgBaseinfoService yqgBaseinfoService;

    /**
     * 查询人员基础信息列表
     */
//    @RequiresPermissions("project:baseinfo:list")
    @GetMapping("/list")
    public TableDataInfo list(YqgBaseinfo yqgBaseinfo)
    {
        startPage();
        List<YqgBaseinfo> list = yqgBaseinfoService.selectYqgBaseinfoList(yqgBaseinfo);
        return getDataTable(list);
    }
    /**
     * 这是Java中的一个方法，是Spring框架应用程序或类似应用程序中服务或控制器层的一部分。这个特殊的方法被命名为list，它以YqgBaseinfo对象作为参数。
     * 以下是每行功能的简要分解：
     * public TableDataInfo list（YqgBaseinfo-qgBaseinfo）：这是方法声明。该方法是公共的，这意味着可以从应用程序中的任何位置访问它。它返回一个TableDataInfo对象。它采用YqgBaseinfo类型的单个参数。
     * startPage（）；：此行调用startPage方法。如果没有上下文，很难说这个方法的作用，但在许多web应用程序中，这可能与为要返回的数据设置分页有关。
     * List<YqgBaseinfo> list = yqgBaseinfoService.selectYqgBaseinfoList(yqgBaseinfo);: 此行从yqgBaseinfoService对象调用selectYqgBaseinfoList方法，并将yqgBaseinfo参数传递给它。返回的Yqgbaseinfoobject列表存储在list变量中。
     * return getDataTable(list);:此行调用getDataTable方法，将YqgBaseinfo对象列表传递给它。然后返回getDataTable返回的TableDataInfo对象。这通常用于将列表数据转换或格式化为可轻松用于创建表的特定结构。
     */



    /**
     * 导出人员基础信息列表
     */
//    @RequiresPermissions("project:baseinfo:export")
    @Log(title = "导出", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, YqgBaseinfo yqgBaseinfo)
    {
        List<YqgBaseinfo> list = yqgBaseinfoService.selectYqgBaseinfoList(yqgBaseinfo);
        ExcelUtil<YqgBaseinfo> util = new ExcelUtil<YqgBaseinfo>(YqgBaseinfo.class);
        util.exportExcel(response, list, "人员基础信息数据");
    }
    /**
     * 用于使用Web的HttpServletResponse对象将某些数据导出到Excel文件。
     * public void export(HttpServletResponse response, YqgBaseinfo yqgBaseinfo):这是一个名为export的公共方法的声明。它需要两个参数：一个HttpServlet响应对象，用于向web应用程序中的客户端发送数据；另一个YqgBaseinfo对象，似乎是应用程序中一个自定义类。
     * List<YqgBaseinfo> list = yqgBaseinfoService.selectYqgBaseinfoList(yqgBaseinfo);:这行代码调用yqgBaseinfoService中的selectYqgBaseinfoList方法。该方法似乎用于根据提供的YqgBaseinfo参数选择YqgBaseinfo对象的列表。结果列表存储在列表变量中。
     * ExcelUtil<YqgBaseinfo> util = new ExcelUtil<YqgBaseinfo>(YqgBaseinfo.class);:在这里，ExcelUtil的一个新实例正在创建，YqgBaseinfo作为其类型参数。看起来ExcelUtil是一个用于处理Excel相关任务的实用程序类，它需要知道将要处理的对象的类（在本例中为YqgBaseinfo）。
     * util.exportExcel(response, list, "人员基础信息数据");:最后，调用util对象的exportExcel方法。此方法可能采用HttpServlet响应对象、YqgBaseinfo对象列表和表示导出数据的标题或标头的字符串（“人员基础信息数据翻译为“人员基本信息数据”）。然后将数据写入Excel文件，并通过HttpServlet响应对象发送给客户端。
     */



    /**
     * 获取人员基础信息详细信息
     */
//    @RequiresPermissions("project:baseinfo:query")
    @GetMapping(value = "/{ID}")
    public AjaxResult getInfo(@PathVariable("ID") Long ID)
    {
        return success(yqgBaseinfoService.selectYqgBaseinfoByID(ID));
    }
    /**
     * 这段代码是一个Spring Boot的接口，接收一个ID作为参数，并通过调用yqgBaseinfoService的selectYqgBaseinfoByID方法来查询相应的信息。最后，将查询结果封装成AjaxResult对象并返回。
     */



    /**
     * 新增人员基础信息
     */
//    @RequiresPermissions("project:baseinfo:add")
    @Log(title = "新增", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody YqgBaseinfo yqgBaseinfo)
    {
        return toAjax(yqgBaseinfoService.insertYqgBaseinfo(yqgBaseinfo));
    }
    /**
     *这段代码是一个Java方法，它接收一个名为yqgBaseinfo的参数，
     * 并将其作为RequestBody传递给add方法。
     * 方法体内部会调用yqgBaseinfoService的insertYqgBaseinfo方法，
     * 并将结果转换为AjaxResult类型返回。
     */



    /**
     * 修改人员基础信息
     */
//    @RequiresPermissions("project:baseinfo:edit")
    @Log(title = "修改", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody YqgBaseinfo yqgBaseinfo)
    {
        return toAjax(yqgBaseinfoService.updateYqgBaseinfo(yqgBaseinfo));
    }
    /**
     * 这段代码是一个Java方法，它接收一个名为yqgConsumptionDetails的参数，
     *   并将其作为RequestBody传递给edit方法。
     *   然后调用yqgConsumptionDetailsService的updateYqgConsumptionDetails方法，
     *   并将结果转换为AjaxResult类型返回。
     *
     *    @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)；
     *    而最常用的使用请求体传参的无疑是POST请求了，所以使用@RequestBody接收数据时，一般都用POST方式进行提交。
     *    在后端的同一个接收方法里，@RequestBody与@RequestParam()可以同时使用，@RequestBody最多只能有一个，而@RequestParam()可以有多个。
     * /





    /**
     * 删除人员基础信息
     */
//    @RequiresPermissions("project:baseinfo:remove")
    @Log(title = "删除", businessType = BusinessType.DELETE)
	@DeleteMapping("/{IDs}")
    public AjaxResult remove(@PathVariable Long[] IDs)
    {
        return toAjax(yqgBaseinfoService.deleteYqgBaseinfoByIDs(IDs));
    }
    /**
     * public AjaxResult remove(@PathVariable Long[] IDs):此方法名为remove，并声明为public，这意味着可以从此类外部访问它。
     * 它返回一个AjaxResult对象，该对象很可能是该方法生成的数据的包装器，通常用于标准化web应用程序中HTTP响应的结构。
     * 该方法以一个长对象数组作为输入，这些对象用@PathVariable进行注释。此注释表示此参数的值将取自web请求中的URI。
     *
     * return toAjax(yqgBaseinfoService.deleteYqgBaseinfoByIDs(IDs));:方法体由一个单独的语句组成，该语句调用yqgBaseinfoService.deleteYqgBaseInfoByID（ID）并传入ID数组。
     * deleteYqgBaseinfoByIDs方法将删除由给定ID标识的YqgBaseinfo的记录。
     * 然后将此操作的结果传递给另一个方法toAjax，该方法大概将结果封装在AjaxResult对象中并返回。
     */
}
